package com.zzyl.nursing.utils;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * 合同编码生成工具类
 * 生成规则：16位编码 = 12位时间(yyMMddHHmmss) + 4位序列号(0001-9999)
 */
public class ContractCodeGenerator {
    
    // 序列号计数器，使用AtomicInteger保证线程安全
    private static final AtomicInteger sequence = new AtomicInteger(0);
    
    // 序列号最大值
    private static final int MAX_SEQUENCE = 9999;
    
    // 日期格式化模式
    private static final String DATE_PATTERN = "yyMMddHHmmss";
    
    // 私有构造方法，防止实例化
    private ContractCodeGenerator() {}
    
    /**
     * 生成合同编码
     * @return 16位的合同编码
     */
    public static synchronized String generate() {
        // 获取当前时间并格式化
        String timePart = new SimpleDateFormat(DATE_PATTERN).format(new Date());
        
        // 获取并递增序列号
        int seq = sequence.incrementAndGet();
        
        // 如果序列号超过最大值，重置为1
        if (seq > MAX_SEQUENCE) {
            sequence.set(1);
            seq = 1;
        }
        
        // 格式化序列号为4位数字，不足前面补0
        String sequencePart = String.format("%04d", seq);
        
        // 拼接时间部分和序列号部分
        return timePart + sequencePart;
    }
    
    /**
     * 重置序列号（可选方法，根据需求使用）
     */
    public static void resetSequence() {
        sequence.set(0);
    }
    
    /**
     * 获取当前序列号值（可选方法，用于测试）
     * @return 当前序列号值
     */
    public static int getCurrentSequence() {
        return sequence.get();
    }
}